package com.liukunup.fuzz.service;

import com.liukunup.fuzz.node.INode;
import com.liukunup.fuzz.node.impl.NodeRotateImpl;
import com.liukunup.fuzz.node.impl.NodeScaleImpl;
import com.liukunup.fuzz.node.impl.NodeTranslateImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 节点注册
 * @author Liu Kun
 * @date 2021-04-06 01:33:44
 **/
@Slf4j
public class NodeFactory {

    private static final Map<String, INode> NODE_REG = new HashMap<>();

    static {
        // 平移
        register("translate", new NodeTranslateImpl());
        // 旋转
        register("rotate", new NodeRotateImpl());
        // 缩放
        register("scale", new NodeScaleImpl());
    }

    /**
     * 节点注册
     * @param name 节点名称
     * @param node 节点实例
     * @return 注册操作成功或失败
     */
    public static boolean register(String name, INode node) {
        if (StringUtils.isEmpty(name)) {
            log.error("节点注册时,名称不能为空或null");
            return false;
        }
        if (null == node) {
            log.error("被注册的节点不能为null");
            return false;
        }
        NODE_REG.put(name, node);
        log.debug("节点 {} 注册成功.", name);
        return true;
    }

    /**
     * 根据名称获取对应节点
     * @param name 节点名称
     * @return 节点
     */
    public static INode getNodeByName(String name) {
        return NODE_REG.getOrDefault(name, null);
    }
}
